/*	--- DateTimeFormatter --- 

使用旧的Date对象时，我们用SimpleDateFormat进行格式化显示。

使用新的LocalDateTime或ZonedLocalDateTime时，我们要进行格式化显示，就要使用DateTimeFormatter。


和SimpleDateFormat不同的是，DateTimeFormatter不但是不变对象，它还是线程安全的。

线程的概念我们会在后面涉及到。现在我们只需要记住：因为SimpleDateFormat不是线程安全的，使用的时候，只能在方法内部创建新的局部变量。而DateTimeFormatter可以只创建一个实例，到处引用。


创建DateTimeFormatter时，我们仍然通过传入格式化字符串实现： */
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");


/*
格式化字符串的使用方式与SimpleDateFormat完全一致。

另一种创建DateTimeFormatter的方法是，传入格式化字符串时，同时指定Locale：*/
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("E, yyyy-MM-dd HH:mm", Locale.US);


// 这种方式可以按照Locale默认习惯格式化。我们来看实际效果：
import java.time.*;
import java.time.format.*;
import java.util.Locale;

public class Main {
	public static void main(String[] args) {
		ZonedDateTime zdt = ZonedDateTime.now();
			// 2019-09-15T23:16 GMT+08:00

		var zhFormatter = DateTimeFormatter.ofPattern("yyyy MM dd EE HH:mm", Local.CHINA); // 2019 9月 15 周日 23:16
		System.out.println(zhFormatter.format(zdt));

		var usFormatter = DateTimeFormatter.ofPattern("E, MM/dd/yyyy HH:mm", Locale.US); // Sun, September/15/2019 23:16
		System.out.prinln(usFormatter.format(zdt));
	}
}


/*
在格式化字符串中，如果需要输出固定字符，可以用'xxx'表示。

运行上述代码，分别以默认方式、中国地区和美国地区对当前时间进行显示，结果如下：*/
2019-09-15T23:16 GMT+08:00
2019 9月 15 周日 23:16
Sun, September/15/2019 23:16


/*
当我们直接调用System.out.println()对一个ZonedDateTime或者LocalDateTime实例进行打印的时候.

实际上，调用的是它们的toString()方法，默认的toString()方法显示的字符串就是按照'ISO 8601格式'显示的,我们可以通过DateTimeFormatter预定义的几个静态变量来引用： */
var ldt = LocalDateTime.now();

System.out.println(DateTimeFormatter.ISO_DATE.format(ldt));
System.out.println(DateTimeFormatter.ISO_DATE_TIME.format(ldt));



// 得到的输出和toString()类似:
2019-09-15
2019-09-15T23:16:51.56217





/*	---- DateTimeFormatter の 小结 ----


1.对ZonedDateTime或LocalDateTime进行'格式化',需要使用DateTimeFormatter类；

2.DateTimeFormatter可以通过'格式化字符串'和'Locale对日期和时间进行定制输出'.

*/











































